package edu.bbu.cshu.wmpcWebGUI;

import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import edu.bbu.cshu.wmpc.plagiarism.PlagiarismTest;

/**
 * Servlet implementation class CheckingServlet
 */
@WebServlet("/CheckingServlet")
public class CheckingServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 * A teszt futtatasahoz szukseges adatok lekerese, beallitasa a feluletrol
	 * file tipus(Java, Cpp, Pascal)
	 * A ket hasonlitando file neve (ez egy csoport, ha tobb filet tartalmaz, akkor majd a jar osszerakja es egyutt vizsgalja)
	 * level, jelenleg original es modified
	 * milyen tipusu teszteket vegezzen el (implementalt algoritmusok
	 * az eredmenyben meg jelenjen vagy nem a hasonlo sorok, az algoritmusok eredmenyei mindenkepp megjelennek
	 * 
	 * A feluleten ha nem voltak egyes adatok kivalasztva, akkor alapertelmezett kerul be, alltalaban a meglevo tipusuk, algoritmusok... elso tagja
	 * 
	 * Session ujra beallitasa, a Main.jsp betoltese(meghivasa)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
				
		HttpSession sess = request.getSession(true);
		
		//beallitasok, az eddigi session adatok lekerese
		String fileFormat = (String)sess.getAttribute("fFormat");
		String firstFile = (String)request.getParameter("firstCombo");
		String secondFile = (String)request.getParameter("secondCombo");
		String mode = (String)request.getParameter("originalOrModified");
		
		ArrayList<String> algTypes = new ArrayList<String>();
		//kivalasztott algoritmusok
		String[] simType = request.getParameterValues("simType");
		int n;
		try{
			n = simType.length;
		}catch (Exception e){
			n = 0;
		}
		if (n > 0) {
			/**
			 * kivalasztott algoritmusok lekerese, jarnak megfelelo beallitas (ArrayList-et var)
			 */
			for(int i = 0; i < n; i++) {
				algTypes.add(simType[i]);
			}
		}else{
			//ha egyik teszt sincs kipipalva, akkor alapertelmezettet futtatni
			algTypes.add(PlagiarismTest.INCTANCE.getTestTypes().get(1));
		}
		
		//a hasonlo sorokat meg kell jeleniteni vagy nem
		String[] shRows = request.getParameterValues("showRows");
		try{
			n = shRows.length;
		}catch (Exception e){
			n = 0;
		}
								
		sess.setAttribute("Error", null);
		//teszt futtatasasa, jar file, eredmeny objektum lekerese
		ArrayList<Object> result = new ArrayList<Object>();
		try {
			result = PlagiarismTest.INCTANCE.getResults(firstFile, secondFile, algTypes, mode, fileFormat);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			sess.setAttribute("Error", true);
			sess.setAttribute("ErrorText", 2);
		}finally{
			if (result.isEmpty()) {
				sess.setAttribute("Error", true);
				sess.setAttribute("ErrorText", 2);
			}
		}
								
	
		//session adatainak beallitasa
		sess.setAttribute("lTypes", mode);  //milyen tipusu level(original/modified...) volt kivalsztva, a feluleten az legyen kijelolve
		sess.setAttribute("fFileN",firstFile); //file nev, ami ki volt valasztva
		sess.setAttribute("sFileN", secondFile); //file nev, ami ki volt valasztva
		sess.setAttribute("fFormat", fileFormat); //milyen formatumu fileok vannak jelenleg megjelenve
		sess.setAttribute("cTypes", algTypes); //kivalasztott algoritmus tipusok
		sess.setAttribute("showCombos", 1);   //fileok listaja meg kell jelenjen
		sess.setAttribute("showResults", 1);  //eredmenyek megjelenitese
		sess.setAttribute("algTypes", algTypes);
		sess.setAttribute("result", result);
		
		if (n == 0){  //a hasonlo sorok jelenjenek meg v nem
			sess.setAttribute("shRows", 0);
		}else{
			sess.setAttribute("shRows", 1);
		}
		
		request.getRequestDispatcher("Main.jsp").forward(request, response);
	}
}
